<?php namespace Home\Controller;

use Hdphp\Controller\Controller;
use Common\Model\Cate;
use Common\Model\Goods;
use Common\Model\GoodsAttr;
use Common\Model\TypeAttr;
use Common\Model\GoodsList;
use Common\Model\Detail;
class DetailController extends Controller{


	public function index(){
		$gid=Q('get.gid',0,'intval');
		// p($gid);
		// 1.获得商品表的信息
		$goodsModel=new Goods;

		// 每次浏览，让商品的click字段自增1
		$goodsModel->where("gid={$gid}")->increment("click",1);
		// （1）、获得热销榜信息，用点击数来判断
		$hotGoodsData=$goodsModel->orderBy("click")->limit(2)->get();
		View::with('hotGoodsData',$hotGoodsData);


		// (2)、获得最近浏览的商品
		//把商品信息存入到session里用作用户当前浏览过的信息
		$id=$gid;
		$cur_time=time();
		//如是COOKIE 里面不为空，则往里面增加一个商品ID
		if (!empty($_COOKIE['SHOP']['history'])){
		//取得COOKIE里面的值，并用逗号把它切割成一个数组
		$history = explode(',', $_COOKIE['SHOP']['history']);
		//在这个数组的开头插入当前正在浏览的商品ID
		array_unshift($history, $id);
		//去除数组里重复的值
		$history = array_unique($history);
		// $arr = array (1,2,3,1,3);
		// $arr = array (1,1,2,3,3);
		// $arr = array (1,2,3);
		//当数组的长度大于5里循环执行里面的代码
		while (count($history) > 5){
		//将数组最后一个单元弹出，直到它的长度小于等于5为止
		array_pop($history);
		}
		//把这个数组用逗号连成一个字符串写入COOKIE，并设置其过期时间为30天
		setcookie('SHOP[history]', implode(',', $history), $cur_time + 3600 * 24 * 30);
		}else{
		//如果COOKIE里面为空，则把当前浏览的商品ID写入COOKIE ，这个只在第一次浏览该网站时发生
		setcookie('SHOP[history]', $id, $cur_time + 3600 * 24 * 30);
		}
		//以上均为记录浏览的商品ID到COOKIE里
		//取得COOKIE里的数据 ,格式为1,2,3,4 这样，当然也有可以为0
		$history =isset ($_COOKIE['SHOP']['history']) ? $_COOKIE['SHOP']['history'] : 0;
		//查询数据库，把当前的浏览商品信息分配到页面
		if($history){
			$historyData=Db::table("shop_goods")->where("gid IN(".$history.")")->get();
//			p($historyData);
			View::with("historyData",$historyData);
		}
		// p($historyData);
		



		$goodsData=$goodsModel->where("gid={$gid}")->find();
		// p($goodsData);
		View::with('goodsData',$goodsData);

		// 2、获得面包屑的数据
		$cateModel=new Cate;
		$cateCid=$goodsData['shop_category_cid'];
		$cateData=$cateModel->get();
		$pid=$cateModel->where("cid={$cateCid}")->pluck('pid');
		$brandData=[];
		if($pid){
			$brandData=$this->getFather($cateData,$pid);
		}
		// 改变一下得到的数组的前后顺序为了便于循环
		array_multisort($brandData,SORT_DESC );
		// 压入商品所属分类数据和商品信息数据
		$brandData[]=$cateModel->where("cid={$cateCid}")->find();
		$brandData[]=$goodsData;
		View::with('brandData',$brandData);


		// 3、获得商品规格
		$goodsAttrModel=new GoodsAttr;
		$goodsAttrData=$goodsAttrModel
								->join('shop_type_attr','taid','=','shop_type_attr_taid')
								->where("shop_goods_gid={$gid} AND class=0")
								->get();
		
		$tempAttrData=[];
		// p($goodsAttrData);
		foreach($goodsAttrData  as $k=>$v){
			$tempAttrData[$v['taname']][]=$v;		
		}
		$psData='';				
		foreach($tempAttrData as $k=>$v){
			$psData=$psData.'->'.$v[0]['gtvalue'];
		}
		View::with('psData',$psData);
		View::with('tempAttrData',$tempAttrData);	


		// 4:获得放大镜图像数据
		$detailModel=new Detail;
		$detailData=$detailModel->where("shop_goods_gid={$gid}")->find();
		// 从新组合数据
		
		$bigStr=ltrim($detailData['big'],'|');
		$bigStr=explode('|',$bigStr);
		$middle=[];
		$small=[];
		$big=[];
		foreach($bigStr as $k=>$v){

			$type=strrchr($v,'.');
			$big[]=$v;
			$middle[]=str_replace($type,'_middle'.$type,$v);
			$small[]=str_replace($type,'_small'.$type,$v);
		}
		$detailData['middle']=$middle;
		$detailData['small']=$middle;
		$detailData['big']=$big;
		// p($detailData);
		View::with('detailData',$detailData);
		View::make();
	}

	// 找父级的话，感觉这种方式不要，$data每次都循环都要重新循环，感觉白白浪费了循环次数
	public function getFather($data,$pid){
		$cateModel=new Cate;
		$breadData=[];
		foreach($data as $k=>$v){
			if($v['cid']==$pid){
				$breadData[]=$cateModel->where("cid={$pid}")->find();
				// array_merge();合并这个函数在这真是在适合不过了
				$breadData=array_merge($breadData,$this->getFather($data,$v['pid']));
			}
		}
		return $breadData;
	}


	// ajax异步的方法
	public function getAjax(){
		$goodsListModel=new GoodsList;
		$str=Q('post.str');
		$gid=Q('post.gid');
		// $str=substr($str,0,strlen($str)-1);
		$str=rtrim($str,',');
		// 注意字段的属性是 字符串还是数字，有个引号要加上，这里的花括号可有可无，不影响
		$goodsListData=$goodsListModel->where("combine='{$str}' AND shop_goods_gid={$gid}")->find();
		$ps='';
		// p($goodsListData);
		if($goodsListData){
			$ps=$goodsListData;
			$tempStr=$str;
			$tempStr=explode(',',$tempStr);
			$goodsModel=new Goods;
			$goodsAttrModel=new GoodsAttr;
			$price=$goodsModel->where("gid={$gid}")->pluck('shopprice');
			$add='';
			foreach($tempStr as $k=>$v){
				$add=$add+$goodsAttrModel->where("gtid={$v}")->pluck('added');
			}
			$ps['price']=$add+$price;
			
			echo json_encode($ps);
			// 要带掉，且在反传数据给ajax之前带掉
			exit;
		}
		echo json_encode($ps);
		exit;
	}




	public function  gwcAjax(){
		$data=Q('post.');

		Cart::add($data);
		
		
	}

}